#include "delay.h"
#include "core_cm3.h"  // DWT、CYCCNT 寄存器定义
#include "stm32f1xx_hal.h" // 用于 SystemCoreClock

void DWT_Delay_Init(void)
{
    // 使能DWT寄存器
    CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
    // 使能 CYCCNT 计数器
    DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
}

void Delay_us(uint32_t us)
{
    uint32_t start = DWT->CYCCNT;
    uint32_t ticks = us * (SystemCoreClock / 1000000U);
    while ((DWT->CYCCNT - start) < ticks);
}

void delay_ms(uint32_t ms)
{
    while (ms--)
    {
        Delay_us(1000);  // 逐个毫秒延时，确保精度
    }
}

